package stephen.com.service;

import stephen.com.model.User;
import stephen.com.model.UserFocus;

import java.util.List;
import java.util.Map;

/**
 * 处理用户业务逻辑的接口
 *
 * @author dullwolf
 */
public interface UserService {

	/**
	 * 通过用户名查找该用户
	 *
	 * @param username 用户名
	 * @return 返回User对象
	 */
	User findUserByName(String username);

	User findUserByEmail(String email);

	/**
	 * 通过用户ID获取用户基本信息(包括部门名字)
	 *
	 * @param userId 用户ID
	 * @return Map对象（其中包括部门名字，以及用户的基本信息）
	 */
	Map<String, Object> findUserBaseById(Integer userId);

	/**
	 * 新增用户
	 *
	 * @param email    邮箱账户
	 * @param username 用户名
	 * @param password 密码
	 */
	void addUser(String email, String username, String password);

	/**
	 * 更新用户的登录时间
	 *
	 * @param id 用户ID
	 */
	void updateLoginTime(Integer id);

	/**
	 * 重置用户密码
	 *
	 * @param password 用户新密码
	 * @Param userId  用户Id
	 */
	void resetPassword(Integer userId, String password);

	/**
	 * 分页查询用户列表信息
	 * @param page 当前页
	 * @return List<Map>对象
	 */
	List<Map<String, Object>> findList(Integer userId,int page,String search);

	/**
	 * 统计查询到的用户列表的记录总数
	 *
	 * @return 用户总数
	 */
//	long sumUsers(String search);
	long sumUsers();

	/**
	 * 取消关注：根据ufId删除关注表的数据
	 *
	 * @param ufId 关注表主键ID
	 */
	public void unFocus(Integer ufId);

	/**
	 * 通过当前用户ID（userId）和关注的用户ID（userFocusId）查询关注表的某条数据
	 *
	 * @param userId      当前用户ID
	 * @param userFocusId 关注的用户ID
	 * @return 关注表数据信息
	 */
	UserFocus findOneFocusData(Integer userId, Integer userFocusId);

	/**
	 * 添加关注：通过当前用户ID（userId）和关注的用户ID（userFocusId）将数据添加到关注表中
	 *
	 * @param userId      当前用户ID
	 * @param userFocusId 关注的用户ID
	 */
	void focus(Integer userId, Integer userFocusId);
}
